From: Florian Müllner Date: Thu, 3 Nov 2016 12:32:40 +0000 (+0100) Subject: networkAgent: Invalidate VPN plugin cache on changes X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~649 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=15be562fdf33c20b1b82035e78dabc9d0f269639;p=gnome-shell.git networkAgent: Invalidate VPN plugin cache on changes Currently the cache is built once when the first VPN request is handled, so plugins that are installed or uninstalled after that aren't picked up. Fix this by invalidating the cache on changes to the plugin directory. https://bugzilla.gnome.org/show_bug.cgi?id=773893 --- diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js index 9308ac04f..205d2f72c 100644 --- a/js/ui/components/networkAgent.js +++ b/js/ui/components/networkAgent.js @@ -615,6 +615,14 @@ const NetworkAgent = new Lang.Class({ this._vpnRequests = { }; this._notifications = { }; + this._pluginDir = Gio.file_new_for_path(GLib.build_filenamev([Config.SYSCONFDIR, 'NetworkManager/VPN'])); + try { + let monitor = this._pluginDir.monitor(Gio.FileMonitorFlags.NONE, null); + monitor.connect('changed', () => { this._vpnCacheBuilt = false; }); + } catch(e) { + log('Failed to create monitor for VPN plugin dir: ' + e.message); + } + this._native.connect('new-request', Lang.bind(this, this._newRequest)); this._native.connect('cancel-request', Lang.bind(this, this._cancelRequest)); @@ -765,9 +773,8 @@ const NetworkAgent = new Lang.Class({ this._vpnCacheBuilt = true; this._vpnBinaries = { }; - let dir = Gio.file_new_for_path(GLib.build_filenamev([Config.SYSCONFDIR, 'NetworkManager/VPN'])); try { - let fileEnum = dir.enumerate_children('standard::name', Gio.FileQueryInfoFlags.NONE, null); + let fileEnum = this._pluginDir.enumerate_children('standard::name', Gio.FileQueryInfoFlags.NONE, null); let info; while ((info = fileEnum.next_file(null))) { @@ -777,7 +784,7 @@ const NetworkAgent = new Lang.Class({ try { let keyfile = new GLib.KeyFile(); - keyfile.load_from_file(dir.get_child(name).get_path(), GLib.KeyFileFlags.NONE); + keyfile.load_from_file(this._pluginDir.get_child(name).get_path(), GLib.KeyFileFlags.NONE); let service = keyfile.get_string('VPN Connection', 'service'); let binary = keyfile.get_string('GNOME', 'auth-dialog'); let externalUIMode = false; @@ -810,7 +817,7 @@ const NetworkAgent = new Lang.Class({ } } catch(e) { log('Error \'%s\' while processing VPN keyfile \'%s\''. - format(e.message, dir.get_child(name).get_path())); + format(e.message, this._pluginDir.get_child(name).get_path())); continue; } }